大作业三 - 强化学习

李姜帆 自64 2016011819

大作业三 - 强化学习游戏/环境玩法环境详细设定钓竿/捕捉条reward算法基于表格Q-learningSARSA深度强化学习加大难度人类经验小结参考资料程序文件附件

游戏/环境

选择了星露谷物语钓鱼游戏作为题目。写了一个环境fish.py模拟该游戏,因为源码也不知道是怎么样的,所以就是架构和一些游玩的经验推测的。

玩法

使用play.py即可体验该游戏。蓝色的条为水深,红色的小鱼会在其中随机移动,可以移动的绿色条由玩家控制,按空格键使其上升,松开则会下降。玩家需要使鱼保持在捕捉条中一定时间来获取胜利,鱼离开捕捉条会使捕捉进度下降,右侧的浮标表示捕捉进度。捕捉进度耗光则游戏失败,捕捉进度满则游戏成功。

环境详细设定

钓竿/捕捉条

捕捉条大致按照物理模型设置,另外设有速度上限。

在上下终止处模拟实际物理世界,即高速落下时会反弹,上浮到水面时速度降为零。

鱼的加速度随机生成,另有速度上限控制。

原游戏wiki中给出了五种鱼的运动方式1

可以用不同的加速度分布来模拟。

reward

reward就以是否在捕鱼条内进行奖惩。

算法

基于表格

class Table

作为离散的算法,针对本游戏连续的环境,可以离散化状态值。Table.ob2state(ob)实现将状态离散化,并存储到状态表中。

Q-learning和SARSA的算法区别主要在学习更新一步,故以两个class Table的子类来实现。

状态空间过大所以训练的效果并不好,2000ep也没有成功过一次,所以还是看下一节吧。

Q-learning

SARSA

深度强化学习

将状态作为神经网络的输入,输出此状态下各个动作的Q值,就可以利用神经网络来存储Q表格,避免了大量的空间去存储Q表。

使用了一层8个单元的隐藏层。主要是考虑以人类来操作的话,大致就是根据位置差和速度差进行判断,不会是很复杂的手段。

100ep训练loss变化:

Figure_1

ep1表现:(GIF在html或Markdown/Typora版本报告中查看)

c__Users_RRRR_Desktop_working_dzy3_rl.py 2020-01-14 14-31-00~1

ep100表现:

c__Users_RRRR_Desktop_working_dzy3_rl.py 2020-01-14 13-17-44 00_00_28.20-00_00_35~1

可以看到它不仅学习到了紧跟鱼移动,保持钓鱼条的位置,而且在下落时有一定的速度控制,减少触底反弹。

加大难度

加大鱼随机运动的最大加速度,使鱼更难被捕捉。使用原先训练的模型,效果如下(鱼最大加速度*2):

c__Users_RRRR_Desktop_working_dzy3_rl.py 2020-01-14 15-02-18

人类经验

主要是在测试小车爬山的时候,小车自己很难爬上去,就没有成功的经验。虽说改reward可以让效果比较好,但是有一点人为地降低了难度——“小车学会爬上山顶”变成了“小车学会加速”。所以可以提供一些人类操作的记录,避免很难达到终点而无法学习到知识。

不过对于本游戏来说,并不是很需要,由于成功的reward很容易获得。

小结

通过本次大作业,对强化学习有了更深刻的了解,同时在作业的驱使下了解了一些当前强化学习各种类型手段。通过神经网路来存储Q表真是精湛的想法。

之后可以考虑加一些图像处理,就能在星露谷钓鱼装外挂啦!(妈妈再也不用担心我钓不到鱼啦

参考资料

强化学习 Reinforcement Learning 教程系列 | 莫烦Python

程序文件

附件